package cn.itcast.xc.first

import cn.itcast.xc.common.EtlEnvironment
import org.apache.spark.sql.SparkSession

/**
 * <p>
 * 统计单词个数
 * </p>
 **/
object WordCount {

  /**
   * 初始化 spark session
   */
  val spark: SparkSession = EtlEnvironment.getSparkSession(this.getClass.getSimpleName)

  def main(args: Array[String]): Unit = {
    // 获取spark context
    val sc = spark.sparkContext

    // 读取文件
    val input = sc.textFile("hdfs://xc-online-hadoop:9000/word.txt")

    // 进行统计
    val counts = input
      // 对单词进行分割使用“\t”
      .flatMap(line => line.split("\t"))
      // 对单词进行计数
      .map(word => (word, 1))
      // 根据key, 相同的计数相加
      .reduceByKey(_ + _)
      // 排序
      .sortBy(_._2, false)

    // 输出结果
    counts.collect().foreach(println(_))

    // 关闭资源
    sc.stop()
    spark.close()

  }

}
